﻿#include "pch.h"
#include "sbcsx.h"

//////////////////////////////////////////////////////////////////////////
// 타입 관리
kType kTmnt::GetType(const kchar* name)
{
	return k_tmnt_get_type(name);
}

kType kTmnt::FindType(const kSymbol& sym)
{
	return k_tmnt_find_type(sym);
}

kTypeInfo* kTmnt::LookType(kType type)
{
	return k_tmnt_look_type(type);
}

kType kTmnt::Register(const kchar* name, const kTypeDecl& decl, kType parent)
{
	return k_tmnt_reg(name, &decl, parent);
}

void kTmnt::DebugPrint(bool usetree)
{
	k_tmnt_debug_print(usetree);
}


//////////////////////////////////////////////////////////////////////////
// 타입 스텁
kTypeInfo* kTsb::GetInfo() const
{
	return k_type_get_info(_type);
}

const kchar* kTsb::GetName() const
{
	return k_type_get_name(_type);
}

const kchar* kTsb::GetDesc() const
{
	return k_type_get_desc(_type);
}

kuint kTsb::GetSymbol() const
{
	return k_type_get_sym(_type);
}

kint kTsb::GetId() const
{
	return k_type_get_id(_type);
}

kbool kTsb::IsValue() const
{
	return k_type_is_value(_type) != 0;
}

kbool kTsb::IsRef() const
{
	return k_type_is_ref(_type) != 0;
}

kint kTsb::GetSize() const
{
	return k_type_get_size(_type);
}

kint kTsb::GetRoam() const
{
	return k_type_get_roam(_type);
}

kint kTsb::GetFlags(kint mask) const
{
	return k_type_get_flags(_type, mask);
}

kint kTsb::GetSupers() const
{
	return k_type_get_supers(_type);
}

kint kTsb::GetChildren() const
{
	return k_type_get_children(_type);
}

kTsb kTsb::GetChildNth(kint nth) const
{
	return kTsb(k_type_get_child_nth(_type, nth));
}

kTsb kTsb::GetParent() const
{
	return kTsb(k_type_get_parent(_type));
}

khOpFunc kTsb::GetOp(kint op)
{
	return k_type_get_op(_type, op);
}

kbool kTsb::FindOp(kint op, khParamDesc** param, khOpFunc* opf)
{
	return k_type_find_op(_type, op, param, opf) != 0;
}

khParamDesc* kTsb::GetParam(const kchar* name) const
{
	return k_type_get_param(_type, name);
}

khParamDesc* kTsb::FindParam(const kSymbol& sym) const
{
	return k_type_find_param(_type, sym);
}

kvoid kTsb::SetDesc(const kchar* desc)
{
	k_type_set_desc(_type, desc);
}

kvoid kTsb::SetRoam(kint roam)
{
	k_type_set_roam(_type, roam);
}

kvoid kTsb::SetFuncConstruct(khCnstFunc func)
{
	k_type_set_func_base_cnst(_type, func);
}

kvoid kTsb::SetFuncDispose(khDispFunc func)
{
	k_type_set_func_base_disp(_type, func);
}

kvoid kTsb::SetFuncKey(khKeyFunc func)
{
	k_type_set_func_key(_type, func);
}

kvoid kTsb::SetFuncHash(khHashFunc func)
{
	k_type_set_func_hash(_type, func);
}

kvoid kTsb::SetFuncEq(khEqFunc func)
{
	k_type_set_func_eq(_type, func);
}

kbool kTsb::SetOps(kint op, khOpFunc opf)
{
	return k_type_set_ops(_type, op, opf) != 0;
}

kbool kTsb::SetOpTable(const khOpTable& opt)
{
	return k_type_set_optable(_type, &opt) != 0;
}

kbool kTsb::BindParam(kint id, khParamDesc* param)
{
	return k_type_bind_param(_type, id, param) != 0;
}

kint kTsb::BindProps(kint baseid, kint count, const khParamPropReg* regs)
{
	return k_type_bind_props(_type, baseid, count, regs);
}

kint kTsb::BindFuncs(kint baseid, kint count, const khParamFuncReg* regs)
{
	return k_type_bind_funcs(_type, baseid, count, regs);
}
